home *** CD-ROM | disk | FTP | other *** search
- /* PROGRAMM: VideoHyperText
- ZWECK: AmigaGuide-Interface für Videotext
- (Print-Technik Teletext Decoder Amiga)
- AUTOR/COPYRIGHT: Mark Nowack
- HISTORY: V0.9: Grundstruktur erstellt
- V1.0: rekursive Seitenerstellung */
-
- OPTIONS RESULTS
-
- IF ~SHOW("P","vtext") THEN /* Videotext bei Bedarf starten */
- DO
- address command
- 'run >NIL: VT:vtext'
- waitforport 'vtext'
- END
-
- IF ~EXISTS('vht:') THEN /* bei Bedarf Verzeichnis im Ram: anlegen */
- DO
- address command
- 'makedir RAM:vht'
- 'assign vht: RAM:vht'
- END
-
- address 'vtext' /* Port adressieren */
-
- donec=0 /* noch keine Seite erstellt */
-
- side=100 /* Wurzelseite festlegen */
-
- DO WHILE side~='Q' /* Seitenerstellung aufrufen */
- CALL Page(side)
- SAY "Welche Seite bitte (q to quit) ? "
- PULL side
- END
- EXIT /* Programmende */
-
-
- Page: PROCEDURE EXPOSE donec donew. /* bereits erstellte Seiten global */
- ARG side /* Parameter: Seitennummer */
- /* SAY side */ /* für Ausgabe der jeweils aktuellen Seite diese Zeile entkommentieren */
- donec=donec+1 /* Seite als erstellt merken */
- donew.donec=side
- donowc=0 /* Anzahl der Folgeseiten erst null */
- OPTIONS RESULTS
- 'active' /* VT aktiv */
- 'selectpage' side /* Seite anfordern */
- 'waitforpage' 40 /* maximal 40 sec warten */
- re=result /* evt. Timeout-Warnung retten */
- 'inactive' /* VT pausiert */
- OPEN(out,"vht:"||side,'WRITE') /* Ausgabedatei öffnen */
- WRITELN(out,'@DATABASE "'||side||'"') /* Guide-Header schreiben */
- WRITELN(out,'@NODE Main')
- IF re=="TIMEOUT" THEN /* wenn Seite nicht gefunden wurde...*/
- DO /*...in der Datei vermerken */
- WRITELN(out,' ')
- WRITELN(out,'### Diese Seite wurde nicht gefunden ###')
- END
- ELSE /* wenn Seite gefunden wurde: */
- DO
- DROP seite
- 'active' /* VT aktiv */
- 'getpage' seite /* aktuelle Seite in "seite" lesen */
- 'inactive' /* VT schläft */
- WRITELN(out,substr(seite,1,40)) /* Statuszeile schreiben */
- DO i=4 TO 23 /* Zeilen nach Folgeseiten..*/
- lin=substr(seite,i*40+1,40) /*..durchsuchen, guide-for- */
- oulin='' /*.. matiert schreiben */
- a=1
- DO WHILE (a<41)
- nr=substr(lin,a,3)
- IF ~DATATYPE(nr,'N') THEN
- DO
- oulin=oulin||substr(nr,1,1)
- END
- ELSE
- DO
- IF nr>99 THEN
- DO
- oulin=oulin||'@{"'||nr||'" LINK "'||nr||'/Main"}'
- donowc=donowc+1 /* Folgeseite...*/
- donoww.donowc=nr /*.. merken */
- a=a+2
- END
- ELSE
- DO
- oulin=oulin||substr(nr,1,1)
- END
- END
- a=a+1
- END
- WRITELN(out,oulin)
- END
- END
- WRITELN(out,'@ENDNODE') /* guide-Datei-Endung schreiben */
- CLOSE(out) /* Ausgabedatei schließen */
- DO i=1 TO donowc /* aktuelle Folgeseiten mit...*/
- must="TRUE" /*..bereits erstellten vergleichen..*/
- DO j=1 TO donec /*..neue Seiten erstellen */
- IF donoww.i==donew.j THEN must="FALSE"
- END
- IF must=="TRUE" THEN CALL Page(donoww.i)
- END
- RETURN 0 /* Ende der Erstellfunktion */
-